﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
namespace InternetShop.Code
{
    /**
     * <summary>Упрощает работу с базой данных</summary>
     * */
    static public class DataHelper
    {
        /**
         * <summary>Выполняет процедуру, а потом выполняет делегат, который выполняет какие-то действия. Например им можно заполнить объект</summary>
         **/
        public static void ExecFillingProc(string procName, Action<IDataReader> filler)
        {
            ExecFillingProc(procName, new SqlParameter[0], filler);
        }
        /**
         * <summary>Выполняет процедуру, а потом выполняет делегат, который выполняет какие-то действия. Например им можно заполнить объект</summary>
         **/
        public static void ExecFillingProc(string procName, IEnumerable<SqlParameter> procParams, Action<IDataReader> filler)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());
            SqlCommand cmd = new SqlCommand(procName, conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            if (procParams.Any())
                cmd.Parameters.AddRange(procParams.ToArray());
            conn.Open();
            var r = cmd.ExecuteReader();
            filler(r);
            if (r != null && !r.IsClosed)
                r.Close();
            conn.Close();
        }
        /**
         * <summary>Выполняет процедуру, которая ничего не возвращает</summary>
         * */
        public static void ExecNonQueryProc(string procName, IEnumerable<SqlParameter> procParams)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());
            SqlCommand cmd = new SqlCommand(procName, conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            if (procParams.Any())
                cmd.Parameters.AddRange(procParams.ToArray());
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}